//package com.dexcoder.demo.utils;
//
//import com.greenline.hrs.util.core.bo.response.Response;
//import com.greenline.hrs.util.core.tool.ResponseUtil;
//import com.weiyi.misp.schedule.biz.QuartzManager;
//import com.weiyi.misp.schedule.dataobject.Contents;
//import com.weiyi.misp.schedule.dataobject.QuartzDTO;
//import com.weiyi.misp.schedule.task.QuartzProcessJob;
//import org.quartz.*;
//import org.quartz.impl.matchers.GroupMatcher;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.BeanUtils;
//import org.springframework.util.CollectionUtils;
//
//import javax.annotation.Resource;
//import java.text.SimpleDateFormat;
//import java.util.*;
//
///**
// * @ Type : com.weiyi.misp.schedule.biz
// * @ Author : TimLi
// * @ Desc :定时任务管理
// * @ Date : 2016-09-19 14:47
// */
//public class QuartzManagerImpl implements QuartzManager{
//
//    private final Logger logger = LoggerFactory.getLogger(QuartzManagerImpl.class);
//
//    @Resource
//    private Scheduler scheduler;
//
//    public Response<Integer> addJob(QuartzDTO dto) {
//        try QuartzDTO catch (SchedulerException e) {
//            logger.error("增加Job异常", e);
//            return ResponseUtil.exception(e.getMessage());
//        }
//    }
//
//    /**
//     * 修改任务定时时间
//     *
//     * @param dto
//     * @throws
//     */
//    public Response<Integer> modifyJob(QuartzDTO dto) {
//        try {
//
//            if (!checkExists(dto)) {
//                return ResponseUtil.exception("该Job不存在");
//            }
//
//            JobKey jobKey = getJobKey(dto);
//            TriggerKey triggerKey =new TriggerKey(dto.getTriggerName());
//            CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
//            if (trigger == null) {
//                return ResponseUtil.exception("定时任务时间异常");
//            }
//            QuartzDTO job = (QuartzDTO)(getJobQuartzDTO(scheduler.getJobDetail(jobKey)));
//            job.setContent(dto.getContent());
//            job.setCronExp(dto.getCronExp());
//            job.setJobType(dto.getJobType());
//            job.setJobValue(dto.getJobValue());
//            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(dto
//                .getCronExp());
//            trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
//                .withSchedule(scheduleBuilder).build();
//            scheduler.rescheduleJob(triggerKey, trigger);
//            logger.info("修改定时JOB:{} 时间成功,修改时间{}", dto.getGroupName(), dto.getCronExp());
//            return ResponseUtil.success();
//        } catch (Exception e) {
//            logger.error("修改定时JOB异常", e);
//            return ResponseUtil.exception(e.getMessage());
//        }
//
//    }
//
//
//    /**
//     * 移除任务
//     *
//     * @param dto
//     * @throws
//     */
//    public Response<Integer> removeJob(QuartzDTO dto)  {
//        try {
//            if (!checkExists(dto)) {
//                return ResponseUtil.exception("该Job不存在");
//            }
//            scheduler.pauseTrigger(new TriggerKey(dto.getTriggerName()));// 停止触发器
//            scheduler.unscheduleJob(new TriggerKey(dto.getJobName()));// 移除触发器
//            scheduler.deleteJob(getJobKey(dto));// 删除任务
//        } catch (Exception e) {
//            logger.error("移除Job异常", e);
//            return ResponseUtil.exception(e.getMessage());
//        }
//        	return ResponseUtil.success();
//    }
//
//    //计划中的任务
//    public Response<List<QuartzDTO>> getPlanJob(){
//        try {
//        	 GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();
//             Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);
//             List<QuartzDTO> jobList = new ArrayList<QuartzDTO>();
//             for (JobKey jobKey : jobKeys) {
//                 List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);
//                 for (Trigger trigger : triggers) {
//                	 QuartzDTO job = (QuartzDTO)(getJobQuartzDTO(scheduler.getJobDetail(jobKey)));
//                     Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
//                     QuartzDTO quartzDTO = new QuartzDTO();
//                     BeanUtils.copyProperties(job, quartzDTO);
//                     quartzDTO.setTriggerState(triggerState.name());
//                     quartzDTO.setJobState(Contents.JOB_STATE_PLAN);
//                     jobList.add(quartzDTO);
//                 }
//             }
//             return ResponseUtil.success(jobList);
//		} catch (Exception e) {
//			logger.error("获取计划中任务发生异常： ", e);
//			return ResponseUtil.exception("获取计划中任务发生异常");
//		}
//    }
//
//
//    //正在运行的job
//    public Response<List<QuartzDTO>> getRunningJob(){
//        try {
//        	List<JobExecutionContext> executingJobs = scheduler.getCurrentlyExecutingJobs();
//            List<QuartzDTO> jobList = new ArrayList<QuartzDTO>(executingJobs.size());
//            for (JobExecutionContext executingJob : executingJobs) {
//            	Trigger trigger = executingJob.getTrigger();
//            	QuartzDTO job = (QuartzDTO)(getJobQuartzDTO(executingJob.getJobDetail()));
//                Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
//                QuartzDTO quartzDTO = new QuartzDTO();
//                BeanUtils.copyProperties(job, quartzDTO);
//                quartzDTO.setTriggerState(triggerState.name());
//                quartzDTO.setJobState(Contents.JOB_STATE_RUN);
//                jobList.add(quartzDTO);
//            }
//            return ResponseUtil.success(jobList);
//		} catch (Exception e) {
//			logger.error("获取运行中任务发生异常： ", e);
//			return ResponseUtil.exception("获取运行中任务发生异常");
//		}
//    }
//
//    //暂停
//    public Response<Integer> pauseJob(QuartzDTO dto){
//    	try {
//			if (!checkExists(dto)) {
//			    return ResponseUtil.exception("该Job不存在");
//			}
//			JobKey jobKey = getJobKey(dto);
//	    	scheduler.pauseJob(jobKey);
//	    	return ResponseUtil.success();
//		} catch (SchedulerException e) {
//			logger.error("暂停任务发生异常： ", e);
//			return ResponseUtil.exception("暂停任务发生异常");
//		}
//    }
//
//
//    //恢复任务
//    public Response<Integer> resumeJob(QuartzDTO dto){
//    	try {
//			if (!checkExists(dto)) {
//			    return ResponseUtil.exception("该Job不存在");
//			}
//			JobKey jobKey = getJobKey(dto);
//			scheduler.resumeJob(jobKey);
//	    	return ResponseUtil.success();
//		} catch (SchedulerException e) {
//			logger.error("恢复任务发生异常： ", e);
//			return ResponseUtil.exception("恢复任务发生异常");
//		}
//    }
//
//    public boolean checkExists(QuartzDTO dto) throws SchedulerException{
//    	if (scheduler.checkExists(getJobKey(dto))) {
//		    return true;
//		}
//    		return false;
//    }
//
//    public JobKey getJobKey(QuartzDTO dto){
//    	return new JobKey(dto.getJobName(), dto.getGroupName());
//    }
//
//    public JobDetail getJobDetail(QuartzDTO dto){
//    	JobDetail jobDetail = JobBuilder.newJob(QuartzProcessJob.class)
//        		.withIdentity(dto.getJobName(), dto.getGroupName())
//        		.build();
//		return jobDetail;
//    }
//
//    public CronTrigger getTrigger(QuartzDTO dto){
//    	CronTrigger trigger = TriggerBuilder.newTrigger()
//        		.withIdentity(dto.getTriggerName())
//                .withSchedule(CronScheduleBuilder.cronSchedule(dto.getCronExp()))
//                .build();
//    	return trigger;
//    }
//
//    public QuartzDTO getJobQuartzDTO(JobDetail jobDetail){
//    	QuartzDTO job = (QuartzDTO)
//    			jobDetail.getJobDataMap().get(Contents.JOB_KEY_PARAM);
//    	return job;
//    }
//    public Response<List<QuartzDTO>> getAllJob(){
//    	Response<List<QuartzDTO>> plantJob = getPlanJob();
//    	Response<List<QuartzDTO>> runJob = getRunningJob();
//    	List<QuartzDTO> allJob = new ArrayList<QuartzDTO>();
//    	if (!CollectionUtils.isEmpty(plantJob.getData())){
//    		allJob.addAll(plantJob.getData());
//    	}
//    	if (!CollectionUtils.isEmpty(runJob.getData())){
//    		allJob.addAll(runJob.getData());
//    	}
//    	return ResponseUtil.success(allJob);
//    }
//
//}
